\section{Resultados}

\subsection{Funcionamiento normal}

Realizamos una prueba simple que consiste en: abrir una conexión, enviar un par de paquetes y cerrarla. Elegimos una muestra en la que además ocurrió una retransmisión. El experimento visto desde wireshark: \\

\begin{center}
	\includegraphics[scale=0.57]{graficos/wireshark.png}
\end{center}

En el tiempo entre que el wireshark lee el ACK del paquete 33819 hasta que efectivamente llega al cliente, éste lo retransmite por timeout. El server sabe que envió el ACK, así que no lo retransmite y, por el lado del cliente, llega el ACK tardío y se reconoce el paquete reenviado. Luego finaliza correctamente la transmisión. \\

Nota: el experimento fue realizado antes de arreglar el bug del timeout que tenía buffers.py.
\newpage
\subsection{Pruebas con archivos}
En esta sección presentamos los resultados obtenidos.

\subsubsection{Gráficos variando el tamaño del archivo a enviar}
Tomamos archivos que varían de 1k a 1M. Hicimos algunas pruebas con archivos más grandes, pero el tiempo requerido para terminar las pruebas fue muy grande y consideramos que las pruebas hechas ya eran suficientes. \\

Hicimos pruebas con diferentes tamaños de ventanas de emisión: 4, 10 (default) y 200. La razón de elegir un valor alto como 200 es que el experimento corre sobre la misma máquina (server y cliente) por lo que es de esperar que la ventana pueda tomar un valor alto antes de ver retransmiciones. \\

Obtuvimos los siguientes promedios de tiempos: 

\begin{center}
\begin{tabular}{ | l | l | l | l | l | l | l | l | l |}
  \hline
   &  1Kb & 5Kb & 10Kb & 50Kb  & 100Kb & 250Kb & 500Kb & 1000Kb \\ \hline
  SWS = 4 & 0.232s & 0.684s & 1.169s & 5.798s & 10.790s & 26.384s & 52.629s & 105.544s \\ \hline
  SWS = 10 &  0.230s & 0.660s & 1.202s & 5.329s & 10.567s & 26.279s & 52.472s & 105.069s \\ \hline
  SWS = 200 &  0.240s & 0.640s & 1.171s & 13.901s & 17.178s & Timeout & Timeout & Timeout \\ \hline
  
\end{tabular}
\end{center}

Para la corrida de SWS = 200, empiezan a haber retransmisiones desde el archivo de 50K. Desde los 250K empieza a caer la conexión por timeout. En promedio, para 50K hubo 177.6 retransmisiones y para 100K 249.2 retransmisiones de un total de 50 y 100 paquetes respectivamente. En el grafico a continuación se nota cómo justamente a partir de los archivos de 50k y 100 comienza a diferenciarse el throughput con una ventana de 200 con respecto a otros tamaños de ventana.

\begin{center}
	\includegraphics[scale=0.5]{graficos/tiempoXarchivo.jpg}
\end{center}

Vemos como el valor menor de ventana da unos promedios de tiempo ligeramente más altos. Esto ocurre porque no se ocupa todo el medio disponible. Si las pruebas hubieran sido realizadas en una comunicación en diferentes PC, la diferencia sería mayor. Las retransmisiones que ocurren con SWS = 200 afectan mucho más al tiempo total de la transmisión.


\newpage
Un segundo gráfico realizado, muestra la relación lineal entre el tamaño del archivo y el tiempo requerido para terminar las pruebas con una ventana de emisión igual a 10. En este caso no encontramos casos de retransmisión. \\

\begin{center}
	\includegraphics[scale=0.5]{graficos/throughput_sws_10.jpg}
\end{center}

\subsubsection{Gráficos variando la ventana de emisión}
En este punto hicimos dos tipos de mediciones variando el tamaño de la ventana de emisión: throughput y cantidad de retransmisiones. En los casos de los archivos más pequeños no tenemos retransmisiones, de forma que no pusimos los gráficos correspondientes. \\

De la misma forma, con los archivos pequeños (de tamaños 1k, 5k y 10k) no se nota una variación muy grande en el throughput. Recién en archivos de tamaño 50k vemos que, con ventanas más grandes, cae severamente el rendimiento. La hipótesis que argumentamos para explicar este fenómeno es que, al tener una ventana más grande, el emisor satura la conexión, lo que termina llevando a un salto en la cantidad de retransmisiones. Puede verse precisamente esto en el gráfico de retransmisiones correspondiente. \\

\newpage
Los siguientes gráficos son en base a un archivo de 50K y la ventana de emisión variando entre 10 y 100:

\begin{center}
\begin{tabular}{ | l | l | l | l |}
  \hline
  SWS & Tiempo & Throughput & Retransmisiones \\ \hline
10 & 5.3209 & 9,396906538 & 0.0 \\ \hline
20 & 5.3235 & 9,392317085 &0.0 \\ \hline
30 & 8.217 & 6,084945844 &46.0 \\ \hline
40 & 6.014 & 8,313934154 &60.0 \\ \hline
50 & 8.813 & 5,673436968 &86.83 \\ \hline
60 & 5.3086 & 9,418679124 &44.0 \\ \hline
70 & 7.8119 & 6,400491558 &120.0 \\ \hline
80 & 7.7109 & 6,484327381 &104.0 \\ \hline
90 & 7.713 & 6,482561908 &104.0 \\ \hline
100 & 7.812 & 6,400409626 &106.0 \\ \hline
\end{tabular}
\end{center}

\begin{center}
	\includegraphics[scale=0.5]{graficos/throughputXsws.jpg}
\end{center}

\begin{center}
	\includegraphics[scale=0.5]{graficos/retransXsws.jpg}
\end{center}

A medida que vamos modificando los tamaños de las ventanas de emisión empezamos a ver los problemas de
performance (en su mayoria por retrasmisiones de paquetes) hasta que, a partir de un determinado tamaño
de ventana, parece estabilizarse el rendimiento o al menos empieza a caer mucho mas lentamente. \\

En los graficos observamos cómo, a medida que el tamaño de la ventana va aumentado, el rendimiento 
en un principio se deteriora notablemente (saltamos de 0 retrasmisiones a 46), 
para luego terminar con el crecimiento brusco y como mencionamos anteriormente, estabilizarse o empezar a deteriorarse 
mucho mas lentamente. \\

La tendencia de aumentar de golpe y luego estabilizarse es similar en ambos gráficos 
(performance y cantidad de retrasmisiones), lo cual nos da la noción de que ambas mediciones 
estan relacionadas (lo cual es esperable), es decir que a la vista de estos gráficos y mediciones, las retramisiones son las causales de la pérdida de performance (throughput).\\

\newpage
Por último, observamos que el throughput tiende a ser mejor con ventanas más pequeñas, llegando a su tope máximo en $SWS=60$. Hicimos varias pruebas para intentar comprender este caso particularmente, y obtuvimos los mismos resultados: dadas esas variables (tamaño del archivo y tamaño de la ventana), el throughput fue mejor que en los otros casos. No encontramos una explicacion concreta de este fenómeno.

Una hipótesis es que tiene que ver con la cantidad de datos que estamos enviando en la prueba, unos 50Kb. Esto se traduce a un poco menos de 60 paquetes (contando el SYN y FIN), que es justo el tamaño asignado a la ventana. Por la misma razón, asumimos que no hay mucho cambio con los tamaños de ventana superiores (de 70 en adelante).